Papylon · administracija · predaja razvoju

Admin: dizajn, pravila i zavisnosti

Osnovna e-commerce administracija za Papylon: sedam odredišta, povezana sa istim podacima kao prodavnica. Bez editora stranica, blokova, bloga, pravnih tekstova ili tema. Ovaj dokument opisuje ponašanje koje backend treba da podrži; ne propisuje framework.

Otvori administracijuProdavnicaPregled za vlasnikaHandoff prodavnice

1. Arhitektura prototipa

papylon-data.js

Osnovni katalog (izvorni snimak 25. 9. 2026.). Nikad se ne mijenja.

papylon-commerce.js

Zajednička demo prodavnica: izmjene iz admina kao preklapanja, porudžbine, zalihe, akcije, kuponi, dostava, prodajna mjesta, admini. Efektivna cijena, kupon, rezervacije, ponuda (quote) i kreiranje porudžbine. localStorage ključ papylon_store_v1; reset vraća seed.

Papylon Admin.dc.html

Administracija (hash rute). Svaka mutacija ide kroz PapylonCommerce.update() i odmah se primjenjuje u prodavnici (i u drugim karticama preko storage događaja).

Papylon.dc.html

Prodavnica čita iste efektivne cijene, zalihe, kategorije, kolekcije, pozicije, dostavu i porudžbine. Dodato: polje za kupon u korpi i kupovini, porudžbine iz kupovine idu u admin, status porudžbine i nalog čitaju isti zapis.

2. Ekrani, rute i stanja

RutaEkrani i stanjaPrimjer
/admin/prijavaPrijava, obnova lozinke, poslat link, greška, istekla sesija (preklop sa zadržavanjem izmjena)Otvori
/adminPregled: 4 metrike, red za obradu, niske zalihe, 7-dnevni grafikon, period (danas/7/30/prilagođeno), stanje bez podatakaPregled
/admin/porudzbineLista, brzi prikazi, pretraga, filteri, izbor, grupno slanje/otkazivanje sa pregledom, CSV, bez rezultata; kartice na mobilnomLista
/admin/porudzbine/{id}Nova pouzećem (1002), plaćena kartica (1001), kartica na čekanju/neuspjela (1003), poslata (1004), otkazana (1005), djelimično vraćena (1006), kupon (1007)DEMO-1006
Dijalozi porudžbineSlanje, potvrda naplate pouzećem, otkazivanje (cijelo/djelimično), povrat robe (stanje, vraćanje na zalihe), povrat novca (djelimičan/pun, na čekanju/uspjeh/neuspjeh), napomena, otpremnica, ponovno slanje emaila, ispravka adrese—
/admin/katalog/proizvodiLista, filteri, grupna izmjena, arhivirano, CSV izvoz, upozorenje za proizvode bez kategorijeProizvodi
…/proizvodi/novi · /{sku}Prazna forma; knjiga, igračka, puzzle, papirnica, poklon; validacija; nesačuvano; konflikt; greška čuvanja; dupliranje kao nacrtKnjiga · Igračka · Puzzle · Notes · Poklon
/admin/katalog/uvozFajl → mapiranje → provjera → uvoz → rezultat, djelimična greška i fajl sa greškamaUvoz
/admin/katalog/kategorijeStablo, pomjeranje gore/dolje, promjena roditelja, vidljivost, nova, spajanje/brisanje sa preraspodjelom, preusmjerenjaKategorije
/admin/katalog/kolekcijeLista, ručni editor, pravila, fiksne pozicije, pregled, isključivanje sa uticajemKreativno popodne · Pokloni do 15 €
/admin/katalog/atributi · /autori-brendoviVrijednosti, primjena, broj upotreba, ispravka i spajanje; izdavači, brendovi, autoriAtributi
/admin/zaliheSve/nisko/nema/manjak, prilagođavanje sa razlogom, istorija, konflikt sa rezervacijamaZalihe
/admin/popusti/akcijeLista, zakazano/aktivno/završeno/pauzirano, editor, pregled preklapanja, demo satAkcija
/admin/popusti/kuponiLista, novi/uredi, ograničenja, upotreba, test korpa, neispravno/isteklo/iskorišćenoDEMO10
/admin/kupci · /{email}Direktorijum, nalog/gost, porudžbine, adrese, interna napomena, email za lozinkuDemo Kupac
/admin/podesavanja/*Prodavnica, dostava (sa pregledom uticaja), plaćanje, prodajna mjesta, pristup (fiksne uloge, poziv, deaktivacija, zaštita posljednjeg admina)Dostava
Zajednička stanjaUčitavanje, sačuvano/greška čuvanja, nesačuvane izmjene (dijalog pri napuštanju), zabranjen pristup, konflikt izmjena, 404404

3. Javna funkcija → kontrola u adminu

Javna funkcijaKontrola / praviloEfekat
Kartice proizvoda i PDPProizvod (naziv, opis, fotografije, specifikacije), efektivna cijena, zalihe, statusIsta cijena, dostupnost i identitet svuda; arhivirano = „Više nije u ponudi“
Navigacija, mega meni, putanjeKategorije: naziv, roditelj, redoslijed, vidljivost, URLMeni, čipovi i putanje; stari URL preusmjeren
Uvod kategorije / odjeljenjaKratak uvod u editoru kategorijePostojeći šablon kategorije/odjeljenja
Kolekcije (3)Editor kolekcije: ručni izbor ili pravilaStranica kolekcije i dodijeljene pozicije
Pokloni do 15 € / Pronađi poklonPravilo: kategorije + efektivna cijena do 15 € + na stanju; pronađi poklon koristi iste atribute i cijeneProizvod izlazi iz kolekcije čim cijena pređe 15 €
Autor / izdavač / brend straniceZajednički entiteti (ispravka i spajanje naziva)Automatski prate povezane proizvode
Police na početnoj i u odjeljenjimaFiksne pozicije (6): kolekcija ili ručni izbor do kapacitetaMijenja se izbor proizvoda; raspored i naslovi su fiksni
Oznaka „Akcija“, stranica AkcijeDirektna akcijska cijena ili zakazana akcija; najniža važeća pobjeđujeKartice, PDP, korpa, kolekcije i Akcije čitaju istu cijenu
Kupon u korpi i kupoviniKuponi + dostavaPoruka o valjanosti, raspodjela popusta, tačan zbir
Dostupnost za kupovinuZalihe i rezervacije (jedan online lager)Dostupno 0 → kupovina onemogućena; manjak blokira kupovinu
Nalog kupca / status porudžbineStanja porudžbine (operativno, plaćanje, isporuka)Kupac vidi „Primljeno / U obradi / Poslato / Isporučeno / Otkazano“
Cijene i prag dostavePodešavanja → Dostava (jedan izvor)Korpa, napredak do besplatne dostave, kupovina, PDP napomena, stranica Dostava i odgovor u Pomoći
Prodajna mjestaPodešavanja → Prodajna mjestaKartice i detalj, u postojećem dizajnu
O nama, pravne stranice, članci, footer tekstoviUpravlja razvojni tim (nema CMS-a)—
RecenzijeNisu stvarna funkcija (samo demo komponenta)Nema administracije recenzija
Lista želja, pretragaAutomatski iz katalogaBez posebne administracije

4. Porudžbine: snimci, stanja i radnje

Operativno

Nova → U obradi → Završena; Otkazana. Otkazivanje ne vraća novac.

Plaćanje

Nije naplaćeno · Čeka potvrdu · Plaćeno · Neuspjelo · Djelimično vraćeno · Vraćeno. Kartica: samo potvrda pružaoca. Pouzeće: eksplicitna potvrda naplate uz audit.

Isporuka

Nije poslato → Spremno → Poslato → Isporučeno; Vraćeno. Slanje ne znači plaćeno ni isporučeno.

Povrat novca

Na čekanju → Uspješno / Neuspjelo. Neuspjeh ne mijenja status plaćanja. Zbir uspješnih + na čekanju ≤ naplaćeno. Iznos = plaćena cijena po komadu − dio kupona za taj komad (+ dostava samo ako se izričito izabere).

Povrat robe

Odvojen od povrata novca. Vraćanje na zalihe samo za fizički primljenu ispravnu robu; oštećena se ne vraća.

Snimak

Naziv, SKU, cijena, akcija, raspodjela kupona, adresa i dostava čuvaju se u porudžbini; izmjena proizvoda ne mijenja stare porudžbine.

Jedna pošiljka po porudžbini. Ako stavka ne može da se isporuči: djelimično otkazivanje prije slanja, pa povrat novca za tu stavku. Ispravka adrese samo prije slanja (audit); nakon slanja interna napomena. Grupno: samo slanje i otkazivanje, sa pregledom ispunjenih/preskočenih; bez grupnog povrata novca.

5. Cijene, akcije, kuponi i dostava

  • Efektivna cijena = najniža od: redovna, direktna akcijska (ako je u roku), aktivne zakazane akcije (redovna × (100 − %) / 100, zaokruženo na cent). Popusti se ne množe. Kraj akcije vraća sljedeću važeću cijenu; redovna se ne mijenja. Konflikt pravila je prijedlog za odobrenje.
  • Raspored: Europe/Podgorica, sa ljetnjim računanjem vremena (CEST/CET). Unos je lokalno vrijeme; čuva se UTC trenutak.
  • Kupon: jedan po porudžbini; akcijski proizvodi isključeni osim ako se izričito uključe; minimum i popust na obuhvaćene proizvode po efektivnoj cijeni, bez dostave; fiksni ≤ obuhvaćeni zbir.
  • Raspodjela i zaokruživanje: popust se dijeli proporcionalno iznosu stavki; dijelovi se zaokružuju naniže, a preostali centi idu stavkama sa najvećim ostatkom (kod jednakosti ranijoj). Zbir tačno odgovara. Primjer DEMO-1007: 1,44 € → 0,77 € + 0,67 €; povrat knjige = 6,93 €.
  • Kupon za dostavu poništava samo standardnu dostavu u aktivnim zonama; ekspres se ne poništava.
  • Prag besplatne dostave računa se na robu nakon kupona (prijedlog, u skladu sa scenarijem 30 € / 2 € / 3 €, ekspres 5 € koji nikad nije besplatan).
  • Upotreba kupona (demo): kartica na čekanju rezerviše; potvrđena kartica ili prihvaćeno pouzeće troši; neuspjeh i otkazivanje prije slanja oslobađaju; povrat novca ne vraća upotrebu. Po kupcu: nalog ili normalizovan email gosta (ograničenje dokumentovano).
  • Izmjena kupona ili dostave važi za buduće kupovine; porudžbine zadržavaju snimak. Iskorišćen kupon se arhivira, ne briše.

6. Zalihe i rezervacije

  • Jedan online lager za baznu verziju. Šest prodajnih mjesta nisu povezana skladišta.
  • Dostupno = na stanju − rezervisano. Rezervacija je izvedena iz porudžbina: nije otkazana, nije poslata, plaćanje nije neuspjelo (demo pravilo: rezervacija od kreiranja porudžbine, i za karticu na čekanju).
  • Slanje jednom umanjuje stanje (stockDeducted) i oslobađa rezervaciju. Otkazivanje / neuspjelo plaćanje oslobađa rezervaciju. Primljen ispravan povrat povećava stanje tek nakon potvrde. Završeno/vraćeno novcem ne mijenja zalihe.
  • Prilagođavanje: apsolutno ili ± sa obaveznim razlogom, prikaz prije/poslije, audit. Ako je novo stanje ispod rezervisanog, prikazuju se pogođene porudžbine; kupovina se blokira umjesto negativne dostupnosti.
  • CSV uvoz postavlja apsolutno stanje i upozorava na konflikt sa rezervacijama.
  • Trajanje rezervacije i trenutak rezervisanja zavise od konačnog backenda plaćanja – odluka vlasnika/razvoja.

7. Uloge i zaštite

RadnjaAdministratorOperater
Pregled porudžbina, kupaca, proizvodaDaDa
Obrada, spremno, slanje, isporuka, otpremnica, napomenaDaDa
Potvrda naplate pouzećemDaDa, uz eksplicitnu potvrdu i audit
Povrat robe, prilagođavanje zalihaDaDa
Povrat novcaDaNe – dugme onemogućeno uz objašnjenje
Cijene, akcije, kuponiDaNe – polja cijena samo za čitanje, Popusti nisu u meniju, direktna ruta prikazuje zabranu
CSV uvoz, podešavanja, pristupDaNe

Deaktivacija posljednjeg aktivnog administratora nije moguća. Admin prijava je odvojena od naloga kupaca. Konflikt izmjena prikazuje izbor umjesto tihog prepisivanja. Server mora provjeravati ovlašćenja, cijene i zalihe; skrivena dugmad nisu zaštita. Radnje nad porudžbinama i povrati moraju biti idempotentni (prototip koristi ID zahtjeva i zaključavanje dugmeta).

8. Zajednički entiteti (dodatak shemi prodavnice)

EntitetKljučna polja
Proizvod (preklapanje)status (draft/published/archived), regular, directSale, saleFrom/To, cats[], author/publisher/brand, images[{src,alt}], facts, attrs, related[], slug, audit[]
Zalihesku, onHand, threshold, track, history[{at, actor, mode, before, after, reason}]; reserved je izveden
Kategorija (preklapanje)name, parent, slug, intro, visible, order, deleted; redirects[{from,to,at}]
Kolekcijatitle, intro, active, mode manual|rules, skus[] ili rules{cats, brands, minPrice, maxPrice, inStock}
Pozicijaid (fiksan), capacity, collection | skus[]
Akcijaid, name, pct, cats[], skus[], exclude[], from, to, status draft|scheduled|paused, history
Kuponcode, type pct|fixed|ship, value, scope all|cats|skus, cats, skus, exclude, minSpend, from, to, limit, perCustomer, active, includeSale, archived
Porudžbinaref, created, customer{name,email,phone,account}, address, lines[{sku,name,img,qty,regular,unit,couponAlloc,total,cancelledQty}], sub, saleSavings, coupon{code,type,value,amount}, ship{method,label,fee,courier,tracking,dispatchedAt}, total, op, ful, pay{method,status,collected,ref}, refunds[], returns[], notes[], activity[]
Podešavanjashipping{freeFrom, expressEnabled, zones[{id,label,std,express,enabled}], timing}, payments{cod, card{provider,connected}}, shop, stores{id: name, phone, map, address, hours}
Adminid, name, email, role admin|operator, active, invited

9. Responzivna pravila

  • ≥ 900 px: stalni bočni meni (240 px), gornja traka, radni prostor do 1520 px; tabele koriste punu širinu i skroluju horizontalno samo unutar svog okvira.
  • < 900 px: meni kao fioka, liste porudžbina i zaliha kao kartice, detalj porudžbine u jednoj koloni (bočna kolona ispod), dijalozi do 94 vw, fioke do 100 vw. Kontrole najmanje 44 px.
  • Statusi uvijek kao tekst + znak, ne samo boja. Dijalozi i fioke: zadržavanje fokusa, Escape, povratak fokusa.
  • Tokeni prodavnice su zadržani; admin dodaje neutralnu pozadinu #F4F2EE, ivicu #E4E1DA i status pozadine (sive/plave/žute/zelene/breskva/crvene) uz tekstualne oznake.

10. Simulirano u prototipu → potrebno u produkciji

PrototipProdukcija
localStorage demo prodavnica + resetTransakciona baza, audit tabela, verzionisanje zapisa za konflikte
Demo prijava i ulogeAutentifikacija tima, sesije, reset lozinke, pozivnice, server-side autorizacija
Demo odgovori pružaoca plaćanjaIntegracija pružaoca: autorizacija, callback/webhook za plaćeno/na čekanju/neuspjelo, povrat novca preko API-ja, idempotentni ključevi
Poruke kupcu (toast)Transakcioni email (potvrda, slanje, otkazivanje, povrat, reset lozinke)
CSV parsiranje u pregledačuServer-side uvoz sa validacijom, sigurnim ponavljanjem i izvještajem grešaka
Otpremljene slike samo lokalnoSkladište slika, obrada veličina, prava objave
Demo satServerski časovnik; zakazivanje akcija u Europe/Podgorica
Kontakt/novostiPostojeća ruta prodavnice (email/servis) – bez posebnog modula

11. Potvrde vlasnika

  • Pravila dostave: prag, cijene po zonama, ekspres i odnos prema pragu (izvor: 30 € / 2 € / 3 € / 5 € naspram 50 € / 4 €).
  • Pružalac plaćanja: načini, povrat novca preko API-ja, djelimični povrati, troškovi.
  • Stvarni izvor zaliha i da li prodajna mjesta dijele online lager.
  • Poreska konfiguracija (PDV, prikaz, fakturisanje) – nije pretpostavljena.
  • Ovlašćenja tima: da li operater smije potvrđivati naplatu pouzećem i mijenjati zalihe.
  • Da li postoje stvarne varijante (npr. boje notesa) – trenutno svi proizvodi su jednostavni; Zu-Zu i Mimi ostaju odvojeni.
  • Pravilo preklapanja akcija i trajanje rezervacije zaliha.

12. Izmjene u prodavnici

  • Polje za kupon u korpi i u kupovini (postojeće komponente), sa porukama o valjanosti i redom „Kupon“ u pregledu troškova, potvrdi i nalogu.
  • Cijene, akcije, zalihe, kategorije (redoslijed, vidljivost, uvod), kolekcije, pozicije, dostava, prodajna mjesta i FAQ o dostavi čitaju zajedničke podatke.
  • Porudžbina iz kupovine se upisuje u admin; nalog kupca (demo.kupac@example.com) i Status porudžbine čitaju snimak iz istog zapisa (npr. DEMO-1004).
  • Arhivirani proizvodi: nema ih u listama; PDP „Više nije u ponudi“. Preusmjerenja starih slugova proizvoda.